package 算法.leetcode.linked.list;

import org.junit.Test;

/**
 * @author lchenglong
 * @date 2020/12/23
 */
public class ReverseList extends LinkListBase{

    @Test
    public void test() {
        int[] arr = new int[]{1,2,3,4,5};
        ListNode head = createTestData(arr);
        ListNode node = reverseList2(head);
        toString(node);
    }

    /**
     * 反转链表
     *
     * @param head
     * @return
     */
    public ListNode reverseList(ListNode head) {
        ListNode node = null;
        while (head!=null) {
            // 取出游标的下一个节点,暂存
            ListNode tmp = head.next;
            // 当前节点采用头插法，node为最新插入的节点
            head.next = node;
            node = head;
            // 继续下一个节点
            head = tmp;
        }
        return node;
    }

    /**
     * 反转链表
     *
     * @param head
     * @return
     */
    public ListNode reverseList2(ListNode head) {
        ListNode pre = head,cur = null;
        while (pre != null) {
            // 取出游标的下一个节点,暂存
            ListNode tmp = pre.next;

            pre.next = cur;

            // 前移一个位置
            cur = pre;
            pre = tmp;
        }
        return cur;
    }

}
